package com.wef.common.service;

/**
 * @FileName SessionConstants.java
 * @Summary 功能描述：用于存放当前登录用户的信息，UserInfo的信息为项目专用信息，可随着项目的需要要而扩展，为了解决无法在UserDetail添加项目自定义信息而增加此类。
 * @Author wangs
 * @Version 1.0
 * @Date 2009-7-10
 */
import java.util.List;
import java.util.Map;

import com.gfa4j.web.SessionManager;
import com.gfa4j.web.UserDetail;

public class UserInfo extends UserDetail {

	private static final long serialVersionUID = 326000000000000L;

	/**
	 * 空的用户信息
	 */
	public static final UserInfo NULL = new UserInfo();

	/**
	 * 资源权限管理界面-条件值配置为：$companyCode$
	 */
	public static final String COMPANY_CODE = "companyCode";

	/**
	 * 条件值: $aclList$
	 */
	public static final String ACl_LIST = "aclList";

	/**
	 * 用户所属公司代码
	 */
	private String companyCode;

	/***
	 * 用户所属上市公司，可能为空
	 */
	private String listedCompanyCode;

	/**
	 * 用户所属经营公司
	 */
	private String operateCompanyCode;

	/**
	 * 用户所能看到的所有模块, moduleCode 为 Key，Module为Value（Module包含用户所具有权限的MenuGroup及 MenuItems）
	 */
	private Map userModules;

	/**
	 * 用户当前操作的模块
	 */
	private String currentModuleCode;

	/**
	 * 用户所有能看到的界面按钮权限， 界面的ViewId为Key，界面对应的Buttons为Value
	 */
	private Map<String, List<String>> userViewToButtonMap;

	public Map<String, List<String>> getUserViewToButtonMap() {
		return userViewToButtonMap;
	}

	public void setUserViewToButtonMap(Map<String, List<String>> userViewToButtonMap) {
		this.userViewToButtonMap = userViewToButtonMap;
	}

	private String viewButtonUrl;

	public String getViewButtonUrl() {
		return viewButtonUrl;
	}

	public void setViewButtonUrl(String viewButtonUrl) {
		this.viewButtonUrl = viewButtonUrl;
	}

	public String getCompanyCode() {
		return companyCode;
	}

	public void setCompanyCode(String companyCode) {
		this.companyCode = companyCode;
	}

	/**
	 * 返回当前登录用户所属的上市公司代码，如果用户不属于上高公司，则返回null
	 * 
	 * @return
	 */
	public String getListedCompanyCode() {
		return listedCompanyCode;
	}

	public void setListedCompanyCode(String listedCompanyCode) {
		this.listedCompanyCode = listedCompanyCode;
	}

	public String getOperateCompanyCode() {
		return operateCompanyCode;
	}

	public void setOperateCompanyCode(String operateCompanyCode) {
		this.operateCompanyCode = operateCompanyCode;
	}

	/**
	 * 返回用户可以操作的模块
	 * 
	 * @return Map, Key 为模块代码，Value 为对应的Module
	 */
	public Map getUserModules() {
		return userModules;
	}

	public void setUserModules(Map userModules) {
		this.userModules = userModules;
	}

	/**
	 * 返回用户当前操作的模块代码
	 * 
	 * @return
	 */
	public String getCurrentModuleCode() {
		return currentModuleCode;
	}

	public void setCurrentModuleCode(String currentModuleCode) {
		this.currentModuleCode = currentModuleCode;
	}

	/**
	 * 返回当前用户登录信息，如果没有用户登录（后台运行程序）或用户注销、用户超时，返回 null.
	 * 
	 * @return
	 */
	public static UserInfo getInstance() {
		return (UserInfo) SessionManager.getUserDetail();
	}
}
